package com.web.actions.usuarios;

import com.web.actions.AbstractAction;
import com.web.actions.usuarios.vo.UsuarioEditorActionForm;

import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionErrors;
import com.ejemplo.bt.usuarios.services.UsuarioServices;
import com.ejemplo.bt.usuarios.vo.Usuario;

/**
 * 
 * @author jorge
 *
 */

public class UsuarioEditorAction extends AbstractAction {
    @Override
  public ActionForward execute(ActionMapping actionMapping,
      ActionForm actionForm,
      HttpServletRequest request,
      HttpServletResponse response) {

    ActionErrors errors = new ActionErrors();

    try {
      UsuarioServices services = new UsuarioServices();
      UsuarioEditorActionForm datosValidados = new UsuarioEditorActionForm();
      
      long idUsuario = 0;
      try {  
          idUsuario = new Long((String)request.getParameter("idUsuario")).longValue();
      }
      catch (NumberFormatException nfex) {
          try {
             idUsuario = ((Long) request.getAttribute("idUsuario")).longValue();
          }
          catch (Exception ex) {
             idUsuario = datosValidados.getIdUsuario();
          }
      }      

      datosValidados.setIdUsuario(idUsuario);
      // chequeo si estoy creando un Usuario o si estoy editando uno ya existente
      if (idUsuario == 0){
        datosValidados.setIdUsuario(0);
        datosValidados.setNombre(null);
        datosValidados.setDocumento(null);
        datosValidados.setPin(null);
        datosValidados.setNivel(0);
        datosValidados.setEmail(null);
      }
      else {
        //recupero el Usuario
        Usuario usuario = services.obtenerUsuario(idUsuario);

        datosValidados.setIdUsuario(usuario.getIdUsuario());
        datosValidados.setNombre(usuario.getNombre());
        datosValidados.setDocumento(usuario.getDocumento());
        datosValidados.setPin(usuario.getPin());
        datosValidados.setNivel(usuario.getTipoUsuario());
        datosValidados.setEmail(usuario.getEmail());
        
      }
      
      // cargo los datos validados en el request
      request.setAttribute("datosValidados", datosValidados);
  
      // Forwardeo
      return actionMapping.findForward("success");
    }
    catch (Exception ex) {
    	ex.printStackTrace();
        // Seteo los errores en el request.
        errors.add(ActionErrors.GLOBAL_MESSAGE, new ActionMessage("error.message",
            ex.getMessage()));
        saveErrors(request, errors);

        // Forwardeo.
        return actionMapping.findForward("failure");
    }
  }


}